#include<bits/stdc++.h> 
using namespace std;
//	为了节省存储资源，在存储单词的时候，有一种把单词共同部分用同一段空间存起来的方式。例
//	如loading和being这两段的ing部分是一样的。所以我们需要找到两个单词的共同后缀。
//1. 每一个输入，都有一个测试用例。第一行是两个初始节点的地址以及结点总数N。节点地址为五
//	个数码组成的整数，并且NULL地址就是-1
//2.接下来跟着N行，每一行都是 address data next的结构
//3.对于每一个测试用例，简单输出一下相同后缀的起始地址就行了，如果两个地址无相同后缀，则
//  输出-1
//4.性能题，特别容易超时或者内存超限 
int times[100000]; //表示某个点被访问的情况 
int nodes[100000]; //表示后继节点用的 
int main(){
	int start1, start2;
	int N;
	cin>>start1>>start2>>N;
	for(int i=0;i<N;i++){
		int add,nxt;
		char dt;
		scanf("%d %c %d",&add,&dt,&nxt);	//实际上数据什么的不重要了 
		nodes[add] = nxt;
	}
	int now = start1;
	while(now!=-1){	//建链，置访问情况 
		times[now] = 1;
		now = nodes[now];
	}
	now = start2;
	while(now!=-1){	//遍历链2，如果访问为1，则直接输出 
		if(times[now]==1){
			printf("%05d", now);
			return 0;
		}
		now = nodes[now];
	}
	cout<<-1<<endl;	//否则为-1 
	return 0;
} 